package com.iwhalecloud.citybrain.flow.platform.manager.domain.model.monitor;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author lilh
 * @date 2019-07-29 10:38
 */
@Data
public class FlowRecordVo implements Serializable {

    private static final long serialVersionUID = -7093011821635067361L;

    /** 实例id */
    private String processInstanceId;

    /** 任务id */
    private String taskId;

    /** 任务名称 */
    private String taskName;

    /** 节点id */
    private String activityId;

    /** 状态：正常、预警、超期、终止、暂停、撤办、错误 */
    private String status;

    /** 环节状态：待处理，已处理 */
    @JsonProperty("taskStatus")
    private String linkStatus;

    /** 操作人工号，不规范的定义，为了兼容老版本，继续保留 */
    private String operator;

    /**
     * 操作人姓名，在会签节点如果有多个人处理，会显示当前字段
     */
    private List<String> operators = new ArrayList<>();

    /**
     * 操作人工号，以当前为准
     */
    private String operatorCode;

    /**
     * 操作人姓名，单个节点的操作人姓名
     */
    private String operatorName;

    /**
     * 操作人姓名集合，会签节点使用
     */
    private List<String> operatorNameList = new ArrayList<>();

    /** 审批意见 */
    private String approval;

    /** 节点类型：开始 - start，任务 - node，结束 - end */
    private String taskNodeType = "node";


    /** 节点分类 */
    private String category;

    /** 处理时间 */
    @JsonProperty("taskNodeTime")
    private Date completeTime;

    /** 是否会签 */
    private Boolean multiInstance = false;

    /** 会签子节点 */
    private List<FlowRecordVo> children = new ArrayList<>();

    /** 会签子任务个数 */
    private Integer numOfInstances;

    /** 需要的处理人数 */
    private Integer numOfHandler;

    /** 已经处理的人数 */
    private Integer numOfCompleted;

    /**
     * 审批意见
     */
    private String comment;

    private Object nodeAuth;

    private Boolean nodeAuthShow= false;

    /**
     * 审批状态
     */
    private  String  approvalStatus;


    private   Integer  exclusiveFlag ; //后面是否连排它网关 1是  0 否

    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 局部变量
     */
    private Map<String, Object> variablesLocal;

    /**
     * 员工工号
     */
    private String employeeCode;

    public FlowRecordVo() {
    }

    public FlowRecordVo(FlowTaskTraceVo taskTrace) {
        BeanUtils.copyProperties(taskTrace, this);
    }

    /**
     * 自定义标题
     */
    private String customTitle;

    /**
     * 已读标记
     */
    private Integer readFlag;
}
